iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0

引言


圖片來源:https://www.reddit.com/r/machinelearningmemes/comments/gqz1dw/big_mistake_gru/

前一篇文章我們講到 RNN,它的特點是能「記住」前面出現過的資訊,用來幫助後面的判斷。聽起來很棒,但實際上 RNN 的記憶力蠻差的。它只能記住比較新的資訊,太久遠的就會忘記。所以在處理過長的序列就會「斷片」。

舉例來說,假設老師在課堂上說了一句很長的話:

明天考試會考第 3、5、7 章的內容,還有上禮拜補充的講義。」

普通的 RNN 就像一個心不在焉的學生,只聽到最後的「講義」,前面的「第 3、5、7 章」都忘記了 🤯
但我們希望模型是能同時記得「考哪幾章」這種長期資訊,也能即時處理「還有講義」這種短期資訊。

LSTM(Long Short-Term Memory)就可以處理這個問題!!它就像一個很會做筆記的學生,會決定 哪些重要資訊要抄下來哪些可以忽略,這樣在考試時,就能調出短期與長期的記憶來回答問題~~

Long Short-Term Memory (LSTM)

下面是一個 RNN 的架構,內部就是加權的計算再加上激活函數。

圖片來源:https://colah.github.io/posts/2015-08-Understanding-LSTMs/

下面是 LSTM 的架構,LSTM 之所以像會做筆記的學生,是因為它有幾個升級版的功能是 RNN 沒有的:記憶單元(cell state)閘門(gates)
link text
圖片來源:https://colah.github.io/posts/2015-08-Understanding-LSTMs/

記憶單元(cell state)

記憶單元可以想像成是一條高速公路,讓訊息可以在上面跨越不同的時間步來流動~所以它可以承載從以前到現在的「記憶」,而經過下方閘門的計算,這個記憶單元的 記憶會不斷被更新

閘門(gates)

閘門則像高速公路上的收費站,決定哪些訊息要留下、哪些要丟掉。
主要有三個閘門:

1. 遺忘閘(Forget Gate):決定前一個時間步帶進來的訊息有多少要被保留、多少要捨棄。

從前一層的輸出帶進來的資訊是 ,這一層新增加的資訊是 。透過 Sigmoid 函數去看有多少比例要被忘掉。
Sigmoid 輸出範圍 [0, 1]:

  • 1 → 完全保留
  • 0 → 完全忘記

2. 輸入閘(Input Gate):決定現在時間步的新訊息有多少要寫進記憶單元。

第一步驟是 「決定什麼要被記錄下來」

  • 第一個公式是要計算有多少資訊要留下(就像遺忘閘的計算),一樣使用 Sigmoid 決定多少比例要被留下。
  • 第二個公式是用 activation function 來決定這些資訊的重要程度,是要用來更新 記憶單元。

所以在這裡處理的是資訊 有沒有存在的必要 乘上 重要程度

第二步驟是 「更新記憶單元」
這裡也結合了前一個遺忘閘的結果 ,所以可以想成是 「忘記部分舊的 + 加入部分新的」

3. 輸出閘(Output Gate):決定從記憶單元輸出多少訊息傳給下一個時間步。

  • 第一個公式是要計算有多少資訊要留下(就像遺忘閘的計算),一樣使用 Sigmoid 決定多少比例要被留下。
  • 第二個公式是把當前時間步的完整記憶,經過 activation function 讓數值控制在 [-1, 1] 之間,然後再跟前面算的 結合。

這樣就算出 ,也就是我們最終要傳出去的隱藏狀態。

結語

今天我們拆解了 LSTM 的記憶過程,看見它是怎麼靠「遺忘閘、輸入閘、輸出閘」去控制訊息的去留,來解決 RNN 失憶的問題。
不過,LSTM 雖然有這些升級功能,在遇到超長的文本或複雜的語境時,還是會顯得有點笨重。

明天我們會介紹另一個 Game Changer,就是 Transformer
我們來看看它是如何跳脫循環結構,使用新的功能 注意力機制(Attention) 來一次性「環顧全局」,並且在 NLP 領域掀起革命!!

References


上一篇
Day 21|模型的記憶力:RNN
系列文
讓電腦聽懂人話:30 天 NLP 入門22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言